"""
日志记录模块

提供统一的日志记录功能。
"""

import logging
import sys
from pathlib import Path
from typing import Optional


def get_logger(name: str = "minicoder", level: int = logging.INFO, 
               log_file: Optional[Path] = None) -> logging.Logger:
    """
    获取日志记录器
    
    Args:
        name: 日志记录器名称
        level: 日志级别
        log_file: 日志文件路径
        
    Returns:
        配置好的日志记录器
    """
    logger = logging.getLogger(name)
    
    # 避免重复添加处理器
    if logger.handlers:
        return logger
    
    logger.setLevel(level)
    
    # 创建格式化器
    formatter = logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    
    # 控制台处理器
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(level)
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
    
    # 文件处理器（如果指定了日志文件）
    if log_file:
        try:
            # 确保日志目录存在
            log_file.parent.mkdir(parents=True, exist_ok=True)
            
            file_handler = logging.FileHandler(log_file, encoding='utf-8')
            file_handler.setLevel(level)
            file_handler.setFormatter(formatter)
            logger.addHandler(file_handler)
        except Exception as e:
            # 如果文件日志失败，只使用控制台日志
            logger.warning(f"无法创建文件日志: {e}")
    
    return logger


def setup_logging(level: str = "INFO", log_file: Optional[Path] = None) -> None:
    """
    设置全局日志配置
    
    Args:
        level: 日志级别字符串
        log_file: 日志文件路径
    """
    # 转换日志级别
    level_map = {
        "DEBUG": logging.DEBUG,
        "INFO": logging.INFO,
        "WARNING": logging.WARNING,
        "ERROR": logging.ERROR,
        "CRITICAL": logging.CRITICAL
    }
    
    log_level = level_map.get(level.upper(), logging.INFO)
    
    # 获取默认日志文件路径
    if log_file is None:
        log_file = Path.home() / ".minicoder" / "minicoder.log"
    
    # 设置根日志记录器
    root_logger = get_logger("minicoder", log_level, log_file)
    
    # 设置其他模块的日志记录器
    get_logger("minicoder.ai", log_level, log_file)
    get_logger("minicoder.core", log_level, log_file)
    get_logger("minicoder.utils", log_level, log_file)
